package cn.yunhe.crm.service;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;

import cn.yunhe.crm.dao.OrdersMapper;
import cn.yunhe.crm.entity.Orders;
import cn.yunhe.crm.entity.OrdersExample;

/**
 * 获取订单信息
 * @author 王璟年
 *
 */

@Scope("prototype") 
@Service("orderbiz")
public class OrderBiz {
	@Autowired
	private OrdersMapper om;

	public void setOm(OrdersMapper om) {
		this.om = om;
	}
	/**
	 * 获取条件下所有的订单信息
	 * @param o
	 * @param currentPage 
	 * @param pageSize 
	 * @return
	 */
	public List<Orders> getOrderList(Map m){
		List<Orders> list = null;
		OrdersExample exa = new OrdersExample();
		OrdersExample.Criteria cri = exa.createCriteria();
		cri.andDelstateEqualTo(0);
		
		if(m==null){
			
			list = om.selectByExample(exa);
		}else{

		
		//根据编号筛选
		if(m.get("id")!=null&&!"".equals(m.get("id"))){
			cri.andIdEqualTo(new Integer(m.get("id").toString()));
		}
		//根据机构名称查询,由于机构名称唯一,也就是机构id筛选
		if(m.get("orgId")!=null&&!"".equals(m.get("orgId"))){
			cri.andCoidEqualTo(new Integer(m.get("orgId").toString()));
		}
		//根据产品状态筛选
		if(m.get("prostate")!=null&&!"".equals(m.get("prostate"))){
			cri.andProductstateEqualTo(new Integer(m.get("prostate").toString()));
		}
		/*根据经办人筛选，经办人是在联系人表中，查询步骤
		 * 1，根据经办人姓名在联系人表中查出所有对应的联系人id
		 * 2，在机构表中根据联系人id查出所有的机构id
		 * 3，根据机构id，查出订单list
		 * 1,2两步骤在service层做，此处获取的是所有的机构id的list,因为criteria中的IN方法，参数为list
		 * */
		if(m.get("orglistbyemp")!=null){
			List l =(List) m.get("orglistbyemp");
			cri.andCoidIn(l);
		}
		/*
		 * 根据联系人筛选，联系人在机构表中，查询步骤
		 * 1.根据联系人姓名在联系人列表中查出所有联系人id
		 * 2.根据联系人id在机构表中查出所有机构id
		 * 3.根据机构id，查出订单list
		 * 1,2步骤在service层做，map中取的是机构idlist
		 */
		if(m.get("orglistbycontact")!=null){
			List l =(List) m.get("orglistbycontact");
			cri.andCoidIn(l);
		}
		//根据使用状态查询
		if(m.get("usestate")!=null&&!"".equals(m.get("usestate"))){
			cri.andUsestateEqualTo(new Integer(m.get("usestate").toString()));
		}
		//根据开通日期查询
		if(m.get("passdate")!=null&&!"".equals(m.get("passdate"))){
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			Date date = null;
			try {
				date = sdf.parse(m.get("passdate").toString());
				cri.andPassdateGreaterThanOrEqualTo(date);	
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
		list = om.selectByExample(exa);
		}
		return list;
	}
	
	/**
	 * 根据id删除订单信息
	 * @param oid
	 * @return
	 */
	public boolean delOrderById(Integer oid) {
		OrdersExample exa = new OrdersExample();
		OrdersExample.Criteria cri = exa.createCriteria();
		
		Orders o=om.selectByPrimaryKey(oid);
		o.setDelstate(1);
		int r=om.updateByPrimaryKeySelective(o);
		return r>0?true:false;
	}
	/**
	 * 根据订单名判断订单是否存在， 存在返回false，不存在返回true
	 * @param oname
	 * @return
	 */
	public boolean checkOrderByName(String oname) {
		OrdersExample exa = new OrdersExample();
		OrdersExample.Criteria cri = exa.createCriteria();
		
		cri.andNameEqualTo(oname);
		//根据条件计数
		int r =om.countByExample(exa);
		return r>0?false:true;
	}
	/**
	 * 添加订单
	 * @param order
	 * @return
	 */
	public boolean addOrder(Orders order) {
		
		int r = om.insertSelective(order);
		return r>0?true:false;

	}
	/**
	 * 根据id筛选订单信息
	 * @param id
	 * @return
	 */
	public Orders selectOrderById(Integer id) {
		Orders order = om.selectByPrimaryKey(id);
		return order;
	}
	/**
	 * 更新订单信息
	 * @param order
	 * @return
	 */
	public boolean updateOrder(Orders order) {
		int r = om.updateByPrimaryKeySelective(order);
		
		return r>0?true:false;
	}
	
}
